package Collection01;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Vector;

/**
 * @Grup:Collection01
 * @Auther:cola
 * @Data:2021/3/23-2021-03-14:58
 * @version:1.0
 *
 * Collection接口:用于存储单个对象的集合
 * List接口:
 * 1.有序的,可以重复的
 * 2.允许多个null元素
 * 3.具体的实现有常用的:ArrayList,Vactor,LinkedList
 *
 * 在实际开发中,我们如何选择list的具体实现
 * 1.安全性问题
 * 2.是否频繁插入,删除操作(建议LinkedList)
 * 3.是否是存储后遍历
 *
 */
public class ListDemo {
    /*
    *ArrayList
    *1.实现原理,采用动态对象数组实现,默认构造方法创建一个空数组
    *2.第一次添加元素,扩展容量为10,之后的扩充算法;原来数组大小+原来数组大小的一半
    *3.不适合进行删除或插入操作
    * 4.为了防止数组动态的扩充次数过多,建议创建ArrayList时,给定初始容量
    * 5.多线程不安全,适合在单线程访问时使用
    * jdk1.2开始引入
    * */
    private static void arrayList(){
        //使用集合来存错多个不同类型的元素(对象),那么在处理的时候会比较麻烦,在实际开发中,不建议
        //这样使用,我们应该在一个集合中存错相同类型的对象
        List<String> list=new ArrayList<String>();
        list.add("产老师");
        list.add("李老师");
        list.add("米老司");
        //遍历集合
        int size=list.size();
        for (int i=0;i<size;i++){
            System.out.println(list.get(i));
        }
        System.out.println(list.contains("李老师"));
        list.remove("米老司");
        System.out.println(list.size());
        String[] array=list.toArray(new String[]{});
        for (String s:array){
            System.out.println(s);
        }
    }
    /*
     * Vector
     * 1.实现原理,采用动态对象数组实现,默认构造方法创建了一个大小为10的对象数组
     * 2.扩充的算法:当增量为0时,扩充为原来大小的2倍,当增量大于0时,扩充为原来大小+增量
     * 3.不适合删除或插入操作
     * 4.为了防止数组动态的扩充次数过多,建议创建Vector时,给定初始容量
     * 5.线程安全,适合在多线程时访问使用,在单线程使用效率较低,
     *
     * 面试题:Vector和ArrayList区别
     * */

    private static void vector(){
        Vector<String>v=new Vector<String>();
        v.add("李老师");
        v.add("米老师");
        v.add("小老师");
        for (int i=0;i<v.size();i++){
            System.out.println(v.get(i));
        }
    }
    /*
    *LinkedList
    * 1.实现原理,采用双向链表结构实现
    * 2.适合插入,删除操作,性能高
    *
    * */
    private static void linkedList(){
        LinkedList<String> list=new LinkedList<>();
        list.add("李老师");
        list.add("张老师");
        list.add("黄老师");
        for (int i=0;i< list.size();i++){
            System.out.println(list.get(i));
        }
    }
    public static void main(String[] args) {
        //arrayList();
        //vector();
        linkedList();
    }
}
